当前位置:编程学习 > JAVA >>

Java设计模式

目录
1. 设计模式 3
1.1 创建型模式 4
1.1.1 工厂方法 4
1.1.2 抽象工厂 6
1.1.3 建造者模式 10
1.1.4 单态模式 13
1.1.5 原型模式 15
1.2 结构型模式 17
1.2.1 适配器模式 17
1.2.2 桥接模式 19
1.2.3 组合模式 23
1.2.4 装饰模式 26
1.2.5 外观模式 29
1.2.6 享元模式 32
1.2.7 代理模式 34
1.3 行为型模式 37
1.3.1 责任链模式 37
1.3.2 命令模式 40
1.3.3 解释器模式 43
1.3.4 迭代器模式 45
1.3.5 中介者模式 49
1.3.6 备忘录模式 52
1.3.7 观察者模式 54
1.3.8 状态模式 58
1.3.9 策略模式 61
1.3.10 模板方法 63
1.3.11 访问者模式 65
1. 设计模式(超级详细)

1.1 创建型模式
AbstractFactory ( 抽象工厂 )
FactoryMethod ( 工厂方法 )
Singleton ( 单态模式 )
Builder ( 建造者模式 )
Protot*pe * 原型模式 )
1.1.1 工厂方法
    *义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例*延迟到其子类。
 适用性
    1.当一个类不知道它所必须创建的对象的类的时候。
    2.当一个类希望由它的子类来指定它所创建的对象的时候。
    3.当*将创建对象的职责委托给多个帮助*类中的某一个,并且*希望将哪一个帮助子类是代理者这一信息局部化的时候。
 参与者
    1.Product
      定义工厂方法所创建的对象的接口。
    2.ConcreteProduct
      实现Product接口。
    3.Creator
      声明工厂方法,该方法返回一个Product类型的对象*
      Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。
      可以调用工厂方法以创建一个Product对象。
    4.ConcreteCreator
      重定义工厂方法以返回一个ConcreteProduct实例。
 类图
 例子
*roduct
public interface Work {
    void doWork();
}
ConcreteProduct
public class StudentWork implements Work {
    public void doWork() {
        System.out.println("学生*作业!");
    }
}
public class TeacherWork implements Work {
    public void doWork() {
        System.out.println("老师审批作业!");
    }
}
Creator
public interface IWorkFactory {
    Work get*ork();
}
Concre*eCreator
pu*lic class StudentWorkFactory implements IWorkFactory {
    public Work getWork() {
        *eturn new StudentWork();
    }
}
public class TeacherWorkFactory implements IWorkFactory {
    public Work getWork() {
        return new TeacherWork();
    }
}
Test
public class Test {
    public static void m*in(Strin*[] args) {
        IWorkFactory studentWorkFactory = new StudentWorkFactory();
        studentWorkFactory.getWork().d*Work();
       
        IWorkFactory teacherWorkFactory * new TeacherWorkFactory();
        teacherWorkFactory.g*tWork().*oWork();
    }
}
result
学生做作业!
老师审批作业!
1.1.2 抽象工厂
    提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
 适用性
    1.一个系统要独立于它的*品的创建、组合和表示时。
    2.一个系统要由多个产品系列中的一个来配置时。
    3.当你要强调一系列相关的产品对象的设计以便进行联合使用时*
    4*当你提供一个产品类库,而只想显示它们*接口而不是实现时。
 参与者
    1.Ab*tractFactory
      声明一个创建抽象产品对象的操作接口。
    2.ConcreteFactory
      实现创建具体产品对象的操作。
    *.AbstractProduct
      为一类产品对象声明一个接口。
    4.ConcreteProdu*t
      定义一个将被相应的具体工厂创建的产品*象。
      实现*bstractProduct接口。
    5.Client
      仅使用由AbstractFactory和AbstractProduc*类声明的接口
 类图
 例子
*bstractFactory
public interface IAn*malFactory {
    ICat createCat();
    IDog cre*teDog();
}
ConcreteFactory
p*blic class BlackAnimalFactory implem*nts IAnimalFactory {
    public ICat createCat() {
        retur* new BlackCat();
    }
    public IDog createDog() {
        return new BlackDog();
    }
}
public class WhiteAnimalFac*ory imp*ements IAnimalFactory {
    public ICat createCat() {
        return new WhiteCat();
    }
    public IDog cre*teDog() {
        return new WhiteDog();
    }
}
Abstrac*Product
public interface ICat {
    void eat();
}
public interface IDog {
    void eat();
}
Concrete*roduct
public class Black*at implements ICat {
    public void eat() {
        System.out.println("The bl*ck cat is eating!");
    }
}
public class WhiteCat implements *Cat {
    public void eat() {
        Sy*tem.out.prin*ln("The w*ite cat is eating!*);
    }
}
public class BlackDog implements IDog {
    public void eat() {
        System.out.println("The black dog is eating");
    }
}
public class WhiteDog implements IDog {
    public void eat() {
        System.out.println("The white dog is eat*ng!");
    }
}
Client
public static void main(String[] args) {
    IAnimalFactory blackAnimalFa*tory = new BlackAnimalFactory();
    ICat blackCat = blackAnimalFactory.createCat();
    blackCat.eat();
    IDog blackD*g = blackAnimalFactory.createDog();
    blackDog.eat();
   
    IAnimalFactory whiteAnimalF*ctory = new WhiteAnimalFactory();
    ICat whiteCat = whiteAnimalFactory.createCat();
    whiteCat.eat();
    IDog *hiteDog = whiteAnimalFactory.createDog();
    whiteDog.eat();
}
res*lt
The bla*k cat is eating!
Th* black dog is eatin*!
The white cat is eating!
The white dog is *ating!
1.1.3 建造者模式
    将一个复杂对象的构*与它的表示分离,使*同样的构建过程可以创建不同的表示。
 适用性
    1.当创建

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,