设计模式
来源:互联网 发布:微信ipa通知关闭编程 编辑:程序博客网 时间:2024/06/05 07:35
1、什么是设计模式
设计模式是一套【经过实践验证】的针对【特定问题】的解决方案,例如如果想让某一个类只被创建一次,并且被其它所有的类公用,则【单例模式】会是很好的解决方案。一般来讲,设计模式具有以下特征:
- 与具体编程语言无关
- 是经过大量工程实践的经验总结
- 可以用来进行系统架构设计
- 恰当使用能够让应用程序更加灵活、可维护性高、代码可重用性高
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
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式~~~~~~~~~~
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- java+内存分配及变量存储位置的区别
- Linux常用基本命令(一)
- FFMpeg_FFPlay 源码剖析(杨书良)
- eclipse 调整 xml 文件字体大小
- Shortest Prefixes——Trie树
- 设计模式
- elasticsearch的使用
- wget命令详解
- 设计模式-单例模式详解
- 解读机器学习基础概念:VC维的来龙去脉
- 让字母自增,就像A-Z,Z后面就是AA-AZ,然后BA-BZ...
- Java数据类型和操作
- MongoDB 入门
- Linux常用基本命令(二)