java的几种设计模式
2016-05-21 21:39
393 查看
(一)工厂方法模式:
简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。
在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中
决定放行那一个方向的车辆向那一个方向流动一样。
先来看看它的组成:
1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
(二)代理模式:
所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用。
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。
简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。
在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中
决定放行那一个方向的车辆向那一个方向流动一样。
先来看看它的组成:
1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
// 代理模式(Prosy):为其他对象提供一种代理以控制这个对象的访问。 /* 代理模式说白了就是“真是对象”的代表, 在访问对象时引入一定程度的剪接性, 应为这种间接性可以附加多种用途。 **/ public class test_10 { public static void main(String[] args) { SuperMan man = new SuperMan(); Proxy proxy = new Proxy(man); proxy.shopping(); } } interface Subject//主题 { public void shopping(); } // 被代理人 class SuperMan implements Subject { private String name; public void shopping() { // 买之前要做大量的评估工作 System.out.println("为媳妇从网上购买进口化妆品,老贵了"); } } //代理人 class Proxy implements Subject { private Subject target;//被代理人 public Proxy(Subject target) { this.target =target; } // 实现接口方法 public void shopping() { // 代理之前要做的事情 System.out.println("做大量的商品专业评估"); target.shopping();// 被代理人真正的 //代购之后要做的事情 System.out.println("代购之后的客户满意度调查"); } }
(二)代理模式:
所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用。
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。
//简单工厂设计模式 //就是不再依赖当前类,自己判断需要哪种了类 public class test_9 { public static void main(String[] args) { /* 耦合,使用者直接使用了具体的类,表示当前类依赖具体类, 这样的话当这个具体类发生变化,使用者将会收到影响 */ /* TCLPhone phone = new TClPhone(); phone.working(); */ //不依赖类; Work work = Factory.getWork("tv"); work.working(); } } class Factory { public static Work getWork(String product) { if ("phone".equals(product)) { return new TCLPhone(); } else if ("tv".equals(product)) { return new TCLTV(); } else { return null; } } } interface Work { public void working(); } class TCLPhone implements Work { public void working() { System.out.println("手机已经开机完毕,可以使用了"); } } class TCLTV implements Work { public void working() { System.out.println("电视机已打开,正在播放新闻联播节目"); } }
相关文章推荐
- Java之hashCode与equals深度剖析与源码详解
- 直接插入排序——java
- java基础知识笔记
- Java NIO系列3:缓冲区
- java stack的详细实现分析
- JAVA中的“抽象接口”
- Java基础(三)
- JAVA设计模式初探之适配器模式
- 使用继承的注意点
- Struts2的第一个程序
- Win7_64下Eclipse配置Hadoop2.6.3
- 使用eclipse搭建android开发环境
- java——创意图形项目总结
- java 异常捕捉
- java单例模式
- 作业_java基础第十一天_集合
- Java File文件操作
- spring mvc controller间跳转 重定向 传参
- Spring_Spring_教程13_利用XML实现Aop方式
- FastDFS之java客户端使用