设计模式

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、总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值