大话设计模式
来源:互联网 发布:詹姆斯vs杜兰特数据 编辑:程序博客网 时间:2024/05/22 13:07
第一章 简单工厂模式——代码无错就是优
实例:计算机控制程序(if与switch的效率问题)
印刷术——活字印刷术:可维护,可复用,可扩展,灵活性好。
面向对象的好处:通过封装、继承、多态把程序的耦合度降低。
业务的封装:业务逻辑与界面逻辑分开,让它们之间的耦合度下降。
聚合关系:聚合表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。(雁群和大雁)
合成关系:合成表示一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。(鸟和翅膀)
多态
public abstract class Human{ ... public abstract void goPee();}
我们定义了一个被称为"人类"的抽象基类."去撒尿"这个方法是抽象的,因为对于整个人类来说没有一个统一的撒尿方法.只有当你具体地讨论这个人是男人还是女人的时候,"撒尿"这个方法才有具体的含义.与此同时,"人类"也是一个抽象的概念-不可能有一个既不是男人也不是女人的"人类"存在.当我们讨论一个人的时候,TA要么是个男人,要么是个女人.
public class Male extends Human{ ... @Override public void goPee() { System.out.println("Stand Up"); }}public class Female extends Human{ ... @Override public void goPee() { System.out.println("Sit Down"); }}
现在我们有了更具体的关于男人和女人的类定义:男人站着撒尿,.他们都是人类的继承类,但是他们有不同的撒尿方法.
多态最完美的展现在于当我们试图让一屋子的人都去撒尿的时候:
public static void main(String args){ ArrayList<Human> group = new ArrayList<Human>(); group.add(new Male()); group.add(new Female()); // ... add more... // tell the class to take a pee break for (Human person : group) { person.goPee(); }}
得到的结果是
Stand UpSit DownSit DownStand UpStand Up...
简单工厂模式
实现
我们将创建一个 Shape 接口和实现 Shape 接口的实体类。下一步是定义工厂类 ShapeFactory。
FactoryPatternDemo,我们的演示类使用 ShapeFactory 来获取 Shape 对象。它将向 ShapeFactory 传递信息(CIRCLE / RECTANGLE / SQUARE),以便获取它所需对象的类型。
步骤 1:创建一个接口
public interface Shape { void draw();}
public class Rectangle implements Shape { @Override public void draw() { System.out.println("Inside Rectangle::draw() method."); }}public class Square implements Shape { @Override public void draw() { System.out.println("Inside Square::draw() method."); }}public class Circle implements Shape { @Override public void draw() { System.out.println("Inside Circle::draw() method."); }}
步骤 3:创建一个工厂,生成基于给定信息的实体类的对象。
public class ShapeFactory { //使用 getShape 方法获取形状类型的对象 public Shape getShape(String shapeType){ if(shapeType == null){ return null; } if(shapeType.equalsIgnoreCase("CIRCLE")){ return new Circle(); } else if(shapeType.equalsIgnoreCase("RECTANGLE")){ return new Rectangle(); } else if(shapeType.equalsIgnoreCase("SQUARE")){ return new Square(); } return null; }}
步骤4:使用该工厂,通过传递类型信息来获取实体类的对象。
public class FactoryPatternDemo { public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); //获取 Circle 的对象,并调用它的 draw 方法 Shape shape1 = shapeFactory.getShape("CIRCLE"); //调用 Circle 的 draw 方法 shape1.draw(); //获取 Rectangle 的对象,并调用它的 draw 方法 Shape shape2 = shapeFactory.getShape("RECTANGLE"); //调用 Rectangle 的 draw 方法 shape2.draw(); //获取 Square 的对象,并调用它的 draw 方法 Shape shape3 = shapeFactory.getShape("SQUARE"); //调用 Square 的 draw 方法 shape3.draw(); }}
步骤 5:验证输出
Inside Circle::draw() method.Inside Rectangle::draw() method.Inside Square::draw() method.
第二章 策略模式——商场促销
实例:商场收银软件
面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。
0 0
- 《大话设计模式》
- 大话设计模式 笔记
- 《大话设计模式》笔记
- 改装:大话设计模式
- 大话设计模式摘要
- 大话设计模式 --- 卷首语
- 《大话设计模式》
- 大话设计模式电子版
- 大话设计模式
- 大话设计模式
- 大话设计模式
- 路遇大话设计模式
- 大话设计模式
- 大话设计模式
- 大话设计模式原则
- 大话设计模式笔记
- 《大话设计模式》读书笔记
- 大话设计模式笔记
- iOS开发
- Django Ubuntu部署:nginx + uWSGI配置
- Oracle全文索引之三 检索
- HDU 1087 最长上升子序列
- 代码打开终端
- 大话设计模式
- listviewmoreitemloaddemo
- Activemq+PHP演示demo
- Django连接Mysql数据库操作(Linux版)
- spring 配置连接池时 各个属性的介绍
- 分析论坛数据库设计&分析
- Android@学习笔记---OneDay
- 比较时间大小
- poj2142The Balance(扩展欧几里得+高中数学知识)