• 怎样使用Java实现Factory设计模式


    刚刚将四人帮的设计模式看完了,总觉得这本书写得实在难理解,痛苦之时,恰好发现了用Java来理解设计模式原来是一种最好的方式,可是苦于网上现在只有C++的设计模式实现源码,而却没有一份完整的Java实现的设计模式源码。小弟不才,希望借此篇文章,让大虾们共同努力,整理出一份较为完整且容易理解的用Java实现的设计模式源码!

      /**

      * Design Pattern In Java

      * Name:Factory

      * 目的:利用工厂模式创建两个产品系列Mac和Win

      * Mac:MacRam,MacCpu

      * Win:WinRam,WinCpu

      * A:abstract

      * C:Concret

      * Author:blackphoenix

      * Modify Date:2002-08-17

      */

      /**

      * 抽象产品类 Ram Cpu

      */

      abstract class AProductRam {

      public String getProduct() {

      return this+" Product";

      }

      }

      abstract class AProductCpu {

      public String getProduct() {

      return this+" Product";

      }

      }

      /**

      * 具体产品 MacRam,WinRam

      */

      class CProductMacRam extends AProductRam {

      public String toString() {

      return "MacRam";

      }

      }

      class CProductWinRam extends AProductRam {

      public String toString() {

      return "WinRam";

      }

      }

      /**

      * 具体产品 MacCpu,WinCpu

      */

      class CProductMacCpu extends AProductCpu {

      public String toString() {

      return "MacCpu";

      }

      }

      class CProductWinCpu extends AProductCpu {

      public String toString() {

      return "WinCpu";

      }

      }

      /**

      *生成一种新的产品系列时,接口改动的代码

      */

      /*

      class CProductNewRam extends AProductRam {

      public String toString() {

      return "NewRam";

      }

      }

      class CProductNewCpu extends AProductCpu {

      public String toString() {

      return "NewCpu";

      }

      }

      */

      /**

      * 抽象工厂 AFactory

      */

      interface AFactory {

      public AProductRam CreateProductRam();

      public AProductCpu CreateProductCpu();

      }

      /**

      * 具体工厂 CFactoryMac

      * 创建Mac产品系列

      × MacRam MacCpu

      */

      class CFactoryMac implements AFactory {

      public AProductRam CreateProductRam() {

      return new CProductMacRam();

      }

      public AProductCpu CreateProductCpu() {

      return new CProductMacCpu();

      }

      }

      /**

      * 具体工厂 CFactoryWin

      * 创建Win产品系列

      × WinRam WinCpu

      */

      class CFactoryWin implements AFactory {

      public AProductRam CreateProductRam() {

      return new CProductWinRam();

      }

      public AProductCpu CreateProductCpu() {

      return new CProductWinCpu();

      }

      }

      /**

      * 要生成一种新的产品系列时,对客户要派发一个新的产品工厂

      * 同时要派生出一种新的具体产品

      * CFactoryNew

      * NewMem,NewCpu

      */

      /*

      class CFactoryNew implements AFactory {

      public AProductRam CreateProductRam() {

      return new CProductNewRam();

      }

      public AProductCpu CreateProductCpu() {

      return new CProductNewCpu();

      }

      }

      */

      /**

      * 客户端

      * 1.使用FactoryMac创建Mac系列产品:ProductMacRam,ProductMacCpu

      × 2.使用FactoryWin创建Win系列产品:ProductWinRam,ProductWinCpu

      * 3.只要知道CFactoryMac,CFactoryWin(具体工厂)和

      * AProductRam,AProductCpu(抽象产品)即可,至于具体产品的创建

      * 细节客户不用关心

      */

      class Factory {

      private static void printProduct(String v) {

      System.out.println(v);

      }

      public static void main(String[] args) {

      AProductRam ProductMacRam=null,ProductWinRam=null;

      AProductCpu ProductMacCpu=null,ProductWinCpu=null;

      CFactoryMac FactoryMac=new CFactoryMac();

      CFactoryWin FactoryWin=new CFactoryWin();

      ProductMacRam=FactoryMac.CreateProductRam();

      ProductMacCpu=FactoryMac.CreateProductCpu();

      ProductWinRam=FactoryWin.CreateProductRam();

      ProductWinCpu=FactoryWin.CreateProductCpu();

      printProduct(ProductMacRam.getProduct());

      printProduct(ProductMacCpu.getProduct());

      printProduct(ProductWinRam.getProduct());

      printProduct(ProductWinCpu.getProduct());

      /**

      *生成一种新的产品系列时,客户端改动的代码

      */

      /*

      AProductRam ProductNewRam=null;

      AProductCpu ProductNewCpu=null;

      CFactoryNew FactoryNew=new CFactoryNew();

      ProductNewRam=FactoryNew.CreateProductRam();

      ProductNewCpu=FactoryNew.CreateProductCpu();

      printProduct(ProductNewRam.getProduct());

      printProduct(ProductNewCpu.getProduct());

      */

      }

      }

  • 相关阅读:
    Hibernate提供的内置标识符生成器
    ThreadLocal解析
    save()/saveOrUpdate()/merge()的区别
    Hibernate中主键生成策略
    session/SessionFactory线程非安全和线程安全
    load/get延迟加载和及时加载
    最长公共子序列:递归,非递归实现
    c语言,递归翻转一个单链表,c实现单链表
    最长递增子序列(Longest Increase Subsequence)
    求一串数字中——和最大的连续子序列; 求一串数字差值的绝对值最小的两个数字
  • 原文地址:https://www.cnblogs.com/cy163/p/1531593.html
Copyright © 2020-2023  润新知