`
akululu
  • 浏览: 44709 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式

    博客分类:
  • Java
阅读更多
  1. package lq.test;   
  2.   
  3. import java.io.*;   
  4. import java.util.*;   
  5.   
  6. //*********创建型模式***************   
  7.   
  8. //factory method 1   
  9. //1具体的构造算法,和2构造出的具体产品由子类实现     
  10. interface Product {   
  11. }   
  12.   
  13. //或者我也提供一个工厂的接口,由这个抽象类来继承它   
  14.   
  15. abstract class Factory {   
  16.     abstract public Product fmd();;   
  17.        
  18.     //我认为这个方方法的存在是,是对FactoryMethod方法的补充   
  19.     //例如可以为生成的对象赋值,计算为生成对象应付何值,前后的日值   
  20.     //且这些都是公用的,生成产品的最主要算法还是在FactoryMethod中,   
  21.     //这个方法只是起辅助作用,这也是一种思维方法,将具体的算法实现在一个方法中   
  22.     //而我不直接调用此方法,而使用另外的一个方法封装它,等到了更灵活的效果,而   
  23.     //子类需实现的内容是FactoryMethod   
  24.     //此方法是一个TemplateMethod   
  25.     public Product creat(); {   
  26.         Product pd = null;   
  27.            
  28.         System.out.println("before operation");;   
  29.            
  30.         pd = fmd();;   
  31.            
  32.         System.out.println("end operation");;   
  33.        
  34.         return pd;   
  35.     }   
  36. }   
  37.   
  38. class Product1 implements Product {   
  39. }   
  40.   
  41. class Factory1 extends Factory {   
  42.     public Product fmd(); {   
  43.         Product pd = new Product1();;   
  44.         return pd;   
  45.     }   
  46. }   
  47.   
  48. //FactroyMethod 2   
  49. //这种方式简单实用   
  50. interface Producta {   
  51. }   
  52.   
  53. interface Factorya {   
  54.     Producta create();;   
  55. }   
  56.   
  57. class Producta1 implements Producta {}   
  58.   
  59. class Factorya1 implements Factorya {   
  60.     public Producta create(); {   
  61.         Producta pda = null;   
  62.         pda = new Producta1();;   
  63.         return pda;   
  64.     }    
  65. }   
  66.   
  67. //AbstractFactory   
  68. //AbstractFactory与FactoryMethod的不同在于AbstractFactory创建多个产品   
  69. //感觉此模式没有什么大用   
  70.   
  71. //当然可以还有更多的接口   
  72. interface Apda {}   
  73.   
  74. interface Apdb {}   
  75.   
  76. interface Afactory {   
  77.     Apda createA();;   
  78.     Apdb createB();;   
  79. }   
  80.   
  81. class Apda1 implements Apda {}   
  82.   
  83. class Apdb1 implements Apdb {}   
  84.   
  85. //有几个接口就有几个对应的方法   
  86. class Afactory1 implements Afactory {   
  87.     public Apda createA(); {   
  88.         Apda apda = null;   
  89.         apda = new Apda1();;   
  90.         return apda;   
  91.     }   
  92.        
  93.     public Apdb createB(); {   
  94.         Apdb apdb = null;   
  95.         apdb = new Apdb1();;   
  96.         return apdb;           
  97.     }   
  98. }   
  99.   
  100. //Builder   
  101. //一个产品的生成分为生成部件和组装部件,不同的产品每个部件生成的方式不同   
  102. //而组装的方式相同,部件的生成抽象成接口方法,而组装的方法使用一个TemplateMethod方法   
  103.   
  104. interface Cpda {}   
  105.   
  106. class Cpda1 implements Cpda {}   
  107.   
  108. interface BuilderI {   
  109.     void buildPart1();;   
  110.     void buildPart2();;   
  111.        
  112.     void initPd();;   
  113.     Cpda getPd();;   
  114. }   
  115.   
  116. abstract class BuilderA implements BuilderI {   
  117.     Cpda cpda;   
  118.        
  119.     public Cpda getPd(); {   
  120.         initPd();;   
  121.            
  122.         //对对象的内容进行设置   
  123.         buildPart1();;   
  124.         buildPart2();;   
  125.            
  126.         return cpda;   
  127.     }   
  128. }   
  129.   
  130. class Builder extends BuilderA {   
  131.     public void buildPart1(); {   
  132.         System.out.println(cpda);;   
  133.     }   
  134.        
  135.     public void buildPart2(); {   
  136.         System.out.println(cpda);;   
  137.     }   
  138.        
  139.     public void initPd(); {   
  140.         cpda = new Cpda1();;   
  141.     }      
  142. }   
  143.   
  144. //一个简单的生成产品的实现   
  145. //1   
  146. abstract class Fy {   
  147.     public abstract void med1();;    
  148.        
  149.     static class Fy1 extends Fy {   
  150.         public void med1(); {   
  151.         }   
  152.     }   
  153.        
  154.     public static Fy getInstance(); {   
  155.         Fy fy = new Fy1();;   
  156.         return fy;   
  157.            
  158. //      Fy fy = new Fy1(); {//这种匿名内部类是静态的!!   
  159. //          public void med1(); {   
  160. //          }   
  161. //      };         
  162. //      return fy;   
  163.     }   
  164. }   
  165.   
  166. //2   
  167. interface Pdd {}   
  168.   
  169. class Pdd1 implements Pdd {}   
  170.   
  171. abstract class Fya {   
  172.     public static Pdd getPd(); {   
  173.         Pdd pdd = new Pdd1();;   
  174.         return pdd;   
  175.     }   
  176. }   
  177.   
  178. //Prototype 在java中就是clone,又包含深拷贝和浅拷贝   
  179. class CloneObja {   
  180.     public CloneObja MyClone(); {   
  181.         return new CloneObja();;   
  182.     }   
  183. }   
  184.   
  185. class CloneObjb {   
  186.     public CloneObjb MyClone(); throws Throwable {   
  187.         CloneObjb cobj = null;   
  188.         cobj = (CloneObjb); pcl(this);;   
  189.         return cobj;   
  190.     }      
  191.        
  192.     //深度拷贝算法   
  193.     private Object pcl(Object obj); throws Throwable {   
  194.         ByteArrayOutputStream bao = new ByteArrayOutputStream(1000);;   
  195.         ObjectOutputStream objo = new ObjectOutputStream(bao);;   
  196.         objo.writeObject(obj);;   
  197.            
  198.         ByteArrayInputStream bai = new ByteArrayInputStream(bao.toByteArray(););;   
  199.         ObjectInputStream obji = new ObjectInputStream(bai);;   
  200.            
  201.         Object objr = obji.readObject();;   
  202.         return objr;   
  203.     }    
  204. }   
  205.   
  206. //Singleton   
  207. //一个类只有一个对象,例如一个线程池,一个cache   
  208. class Singleton1 {   
  209.     public static Singleton1 instance = new Singleton1();;     
  210.        
  211.     private Singleton1(); {        
  212.     }   
  213.        
  214.     public static Singleton1 getInstance(); {   
  215.         return instance;   
  216.     }   
  217. }   
  218.   
  219. class Singleton2 {   
  220.     public static Singleton2 instance;   
  221.        
  222.     private Singleton2(); {   
  223.     }   
  224.        
  225. //  public static Singleton2 getInstance(); {          
  226. //      if (instance == null); {   
  227. //          instance = new Singleton2();;   
  228. //      }   
  229. //         
  230. //      return instance;   
  231. //  }   
  232.        
  233.     public static Singleton2 getInstance(); {   
  234.         synchronized(Singleton2.class); {   
  235.             if (instance == null); {   
  236.                 instance = new Singleton2();;   
  237.             }   
  238.         }   
  239.            
  240.         return instance;   
  241.     }   
  242. }   
  243.   
  244. //**********结构型模式**********   
  245.   
  246. //Adapter   
  247. //基本方法有两种,一种是使用引用一种使用继承   
  248. //将不符合标准的接口转成符合标准的接口,接口的修改主要是参数的增减,   
  249. //返回值类型,当然还有方法名   
  250. //感觉这就是封装的另一种表示形式,封装有用方法封装(在方法中调用功能方法);,   
  251. //用类封装(先传入功能方法所在的类的对象,通过调用此对象的功能方法);   
  252.   
  253. //使用引用的形式   
  254. class Adapteea {   
  255.     public void kk(); {}   
  256. }   
  257.   
  258. interface Targeta {   
  259.     String vv(int i, int k);;   
  260. }   
  261.   
  262. class Adaptera implements Targeta{   
  263.     Adapteea ade;   
  264.        
  265.     public Adaptera(Adapteea ade); {   
  266.         this.ade = ade;   
  267.     }   
  268.        
  269.     public String vv(int i, int k); {   
  270.         //具体的业务方法实现在Adaptee中,这个方法   
  271.         //只起到了接口转换的作用   
  272.         //调用此方法是通过引用   
  273.         ade.kk();;   
  274.         return null;   
  275.     }   
  276. }   
  277.   
  278. //使用继承形式的   
  279. class Adapteeb {   
  280.     public void kk(); {}   
  281. }   
  282.   
  283. interface Targetb {   
  284.     String vv(int i, int k);;   
  285. }   
  286.   
  287. class Adapterb extends Adapteeb implements Targetb {   
  288.     public String vv(int i, int k); {   
  289.         //调用此方法是通过继承   
  290.         kk();;   
  291.         return null;   
  292.     }   
  293. }   
  294.   
  295. //Proxy   
  296. interface Subject {   
  297.     void request();;   
  298. }    
  299.   
  300. class realSubject implements Subject {   
  301.     public void request(); {           
  302.         //do the real business   
  303.     }   
  304. }   
  305.   
  306. class Proxy implements Subject {   
  307.     Subject subject;   
  308.        
  309.     public Proxy(Subject subject); {   
  310.         this.subject = subject;   
  311.     }   
  312.        
  313.     public void request(); {   
  314.         System.out.println("do something");;   
  315.            
  316.         subject.request();;   
  317.            
  318.         System.out.println("do something");;   
  319.     }   
  320. }   
  321.   
  322. //Bridge   
  323. //感觉就是多态的实现   
  324.   
  325. interface Imp {   
  326.     void operation();;   
  327. }   
  328.   
  329. class Cimp1 implements Imp {   
  330.     public void operation(); {   
  331.         System.out.println("1");;   
  332.     }   
  333. }   
  334.   
  335. class Cimp2 implements Imp {   
  336.     public void operation(); {   
  337.         System.out.println("2");;   
  338.     }   
  339. }   
  340.   
  341. class Invoker {   
  342.     Imp imp = new Cimp1();;   
  343.        
  344.     public void invoke(); {   
  345.         imp.operation();;   
  346.     }   
  347. }   
  348.   
  349. //Composite   
  350.   
  351. interface Component {   
  352.     void operation();;   
  353.        
  354.     void add(Component component);;   
  355.        
  356.     void remove(Component component);;   
  357. }   
  358.   
  359. class Leaf implements Component {   
  360.     public void operation(); {   
  361.         System.out.println("an operation");;   
  362.     }   
  363.        
  364.     public void add(Component component); {   
  365.         throw new UnsupportedOperationException();;   
  366.     }   
  367.        
  368.     public void remove(Component component); {   
  369.         throw new UnsupportedOperationException();;   
  370.     }   
  371. }   
  372.   
  373. class Composite implements Component {   
  374.     List components = new ArrayList();;   
  375.        
  376.     public void operation(); {   
  377.         Component component = null;   
  378.            
  379.         Iterator it = components.iterator();;          
  380.         while (it.hasNext();); {   
  381.             //不知道此component对象是leaf还是composite,   
  382.             //如果是leaf则直接实现操作,如果是composite则继续递归调用   
  383.             component = (Component); it.next();;   
  384.             component.operation();;   
  385.         }   
  386.     }   
  387.        
  388.     public void add(Component component); {        
  389.         components.add(component);;   
  390.     }   
  391.        
  392.     public void remove(Component component); {         
  393.         components.remove(component);;   
  394.     }   
  395. }   
  396.   
  397. //Decorator   
  398. //对一个类的功能进行扩展时,我可以使用继承,但是不够灵活,所以选用了   
  399. //另外的一种形式,引用与继承都可活得对对象的一定的使用能力,而使用引用将更灵活   
  400. //我们要保证是对原功能的追加而不是修改,否则只能重写方法,或使用新的方法   
  401. //注意concrete的可以直接new出来,   
  402. //而decorator的则需要用一个另外的decorator对象才能生成对象   
  403. //使用对象封装,和公用接口   
  404. //Decorator链上可以有多个元素   
  405.   
  406. interface Componenta {   
  407.     void operation();;   
  408. }   
  409.   
  410. class ConcreteComponent implements Componenta {   
  411.     public void operation(); {   
  412.         System.out.println("do something");;   
  413.     }   
  414. }   
  415.   
  416. class Decorator implements Componenta {   
  417.     private Componenta component;   
  418.        
  419.     public Decorator(Componenta component); {   
  420.         this.component = component;   
  421.     }   
  422.        
  423.     public void operation(); {   
  424.         //do something before   
  425.            
  426.         component.operation();;   
  427.            
  428.         //do something after   
  429.     }   
  430. }   
  431.   
  432. //Facade   
  433. //非常实用的一种设计模式,我可以为外部提供感兴趣的接口   
  434.   
  435. class Obj1 {   
  436.     public void ope1(); {}   
  437.     public void ope2(); {}   
  438. }   
  439.   
  440. class Obj2 {   
  441.     public void ope1(); {}   
  442.     public void ope2(); {}   
  443. }   
  444.   
  445. class Facade {   
  446.     //我得到了一个简洁清晰的接口   
  447.     public void fdMethod(); {   
  448.         Obj1 obj1 = new Obj1();;   
  449.         Obj2 obj2 = new Obj2();;   
  450.            
  451.         obj1.ope1();;   
  452.         obj2.ope2();;   
  453.     }   
  454. }   
  455.   
  456. //Flyweight   
  457. //空   
  458.   
  459. //**********行为型模式*************   
  460.   
  461. //Chain of Responsibility   
  462. //与Decorator的实现形式相类似, &nb
分享到:
评论

相关推荐

    Java 经典设计模式讲解以及项目实战

    Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...

    基于Java的设计模式大作业绘图系统【六种设计模式+文档】.zip

    本系统基于六种设计模式,运用到的设计模式有备忘录模式,简单工厂模式,迭代器模式,状态模式,模版方法模式,单例模式。 具体实现过程、UML类图以及实现效果详见如下项目说明地址: ... 该系统为绘图系统,该系统通过...

    设计模式精解- GoF 23种设计模式解析附C++实现源码

    设计模式精解- GoF 23种设计模式解析附C++实现源码 懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要。反之好像也可能成立。道可道,非常道。道不远人,设计模式亦然如此。 一直想把自己的学习经验以及在...

    C_设计模式(23种设计模式)

    C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计...

    23种设计模式经典案例(C++版)

    设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代 码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计...

    Java设计模式 设计模式介绍

    章节介绍:1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立性模式介绍 4、单态创立性模式介绍 5、单态创立性模式介绍 6、观察者模式介绍7、责任链模式 8、设计模式之...

    深入浅出设计模式 完整扫描版

    《深入浅出设计模式》总结了许多系统软件在设计开发过程中的难点,力图将设计模式的实际应用与实现原理有机结合起来,破解软件开发人员在学习设计模式过程不能透彻理解并灵活运用设计模式的难题。  所有章节都是先...

    设计模式:可复用面向对象软件的基础--详细书签版

     “[设计模式]在实用环境下特别有用,因为它分类描述了一组设计良好,表达清楚的面向对象软件设计模式。整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法...

    java 23种设计模式.zip

    设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:...

    Android源码设计模式解析与实战.pdf

    《Android 源码设计模式解析与实战》不仅分析了Android源代码的设计模式,更结合实例演示了如何使用这些设计模式。看这本书,既能学到如何分析、学习Android源代码,又能提高自己架构设计水平 《Android 源码设计...

    设计模式中文版

    尽管该书涉及较多的内容,但书中讨论的设计模式仅仅包含了一个设计行家所知道的部 分。书中没有讨论与并发或分布式或实时程序设计有关的模式,也没有收录面向特定应用领 域的模式。本书并不准备告诉你怎样构造用户界面...

    C++ Qt设计模式源代码

    书是美国萨福克大学已使用十余年的经典教程,利用跨平台开源软件开发框架Qt阐释了C++和设计模式中的主要思想。全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零...

    java常用23中设计模式

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    设计模式课程设计---使用6个不同的设计模式完成绘图系统(java)

    运用到的设计模式有备忘录模式,迭代器模式,简单工厂模式,状态模式,模版方法模式,单例模式。 资源包含项目文件(eclipse)以及系统说明(docx文件),系统说明中说明了为什么要使用该模式,使用该模式有什么好处...

    24种设计模式以及混合设计模式

    24中设计模式 混合设计模式 设计模式实际应用案例 费了很多时间和精力整理的

    C#设计模式_C#设计模式_

    C# 设计模式.pdf 文档。无论您是新手,还是老手,本教程都值得一读。对于那些具有丰富的开发经验的开发人员,学习设计模式有助于了解在软件开发过程中所面临的问题的最佳解决方案;对于那些经验不足的开发人员,学习...

    研磨设计模式带书签完整版228M.7z.002

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

    设计模式解析(第二版)

    阅读本书,读者能够完整地理解12个核心的设计模式和1个分析模式,了解设计模式并不是孤立存在的,多个设计模式协同工作才能创建出更加坚固的应用程序。这里所讲授的12个模式并没有涵盖所有应该学会的模式,但是理解...

    研磨设计模式带书签完整版228M.7z.001

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

    研磨设计模式(完整带书签).part2.pdf

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

Global site tag (gtag.js) - Google Analytics