设计模式

来源:互联网 发布:微信ipa通知关闭编程 编辑:程序博客网 时间:2024/06/05 07:35

1、什么是设计模式
设计模式是一套【经过实践验证】的针对【特定问题】的解决方案,例如如果想让某一个类只被创建一次,并且被其它所有的类公用,则【单例模式】会是很好的解决方案。一般来讲,设计模式具有以下特征:

  1. 与具体编程语言无关
  2. 是经过大量工程实践的经验总结
  3. 可以用来进行系统架构设计
  4. 恰当使用能够让应用程序更加灵活、可维护性高、代码可重用性高

3、设计模式分类

  1. 创建型设计模式
    工厂模式
    抽象工厂模式
    单例模式
    原型模式
    建造者模式
  2. 结构型设计模式
    适配器模式
    桥接模式
    组合模式
    装饰模式
    外观模式
    享元模式
    代理模式
  3. 行为型设计模式
    职责链模式
    命令模式
    解释器模式
    迭代器模式
    中介者模式
    备忘录模式
    观察者模式
    状态模式
    模板方法模式
    访问者模式

4、设计模式实践

(1) 创建型模式——工厂模式

public class FactoryMethod {    public static void main(String[] args) throws IOException {        String animalType = null;        BufferedReader bufferReader = new BufferedReader(new InputStreamReader(System.in));        animalType = bufferReader.readLine();        Animal animal = AnimalFactory.getAnimal(animalType);        if(animal != null){            animal.yell();        }    }}abstract class Animal {    protected int age; // 设置成protected,让子类可以访问    public abstract void yell();}class Dog extends Animal {    @Override    public void yell() {        System.out.println("Dog yell");    }}class Cat extends Animal {    @Override    public void yell() {        System.out.println("Cat yell");    }}class AnimalFactory {    public static Animal getAnimal(String type){        if(type.equalsIgnoreCase("Dog")){            return new Dog();        }        if(type.equalsIgnoreCase("Cat")){            return new Cat();        }        return null;    }}

(2)创建型模式——抽象工厂模式

public class AbstractFactory {    public static void main(String[] args) throws IOException {        String factoryType = null;        BufferedReader bufferReader = new BufferedReader(new InputStreamReader(System.in));        factoryType = bufferReader.readLine();        AbstractAnimalFactory animalFactory = AnimalFactoryCreater.getFactory(factoryType);        if(animalFactory != null){            Animal animal = animalFactory.getAnimal();            animal.yell();        }    }}class AnimalFactoryCreater{    public static AbstractAnimalFactory getFactory(String choice){        if(choice.equalsIgnoreCase("Dog")){            return new DogFactory();        }         if(choice.equalsIgnoreCase("Cat")){            return new CatFactory();        }        return null;    } }abstract class AbstractAnimalFactory {    public abstract Animal getAnimal();}class DogFactory extends AbstractAnimalFactory {    @Override    public Animal getAnimal() {        return new Dog();    }}class CatFactory extends AbstractAnimalFactory {    @Override    public Animal getAnimal() {        return new Cat();    }}abstract class Animal {    protected int age; // 设置成protected,让子类可以访问    public abstract void yell();}class Dog extends Animal {    @Override    public void yell() {        System.out.println("Dog yell");    }}class Cat extends Animal {    @Override    public void yell() {        System.out.println("Cat yell");    }}

5、总结

原创粉丝点击