浅谈设计模式

原创 2007年10月08日 10:29:00

    花了两天时间好好研究了下设计模式,设计模式(design pattern),得到很多高人的大力推崇,就像很多人说学习设计模式好比修炼内功,难点就是如何在实际中运用。单单这两句话,我完全同意。下面,我谈下自己学习设计模式的感想。

   首先从工厂模式开始:

   工厂模式分三类:简单工厂(simple factory)模式;工厂方法(factory method)模式,又称多线性工厂模式 (polymophic factory pattern);抽象工厂(abstract factory)模式,又称工具箱(kit或toolkit)模式.

   那么工厂模式我们又该如何在实际中运用,或者什么时候该运用工厂模式?

   我们都知道,当我们实例化一个对象的时候,我们会这样写:以sample为例

  Sample sample=new Sample().

   很简单的创建对象,但实际情况是 我们经常需要在创建对象实例时做些初始化的工作,比如赋值,查询数据库或者更多。就像这样 Sample sample=new Sample(参数)。好像一切都对了,但是再次暴露了一个问题,如果参数需要很长一段代码,而不是简单的赋值。那我们的code就会相当难看。这个时候就需要refactor.于是工厂模式就该上场了。这也是完全符合OO的encapsulation 和 delegation思想的。下面我们简单看下如何运用

  简单工厂模式是由单个工厂类来决定该实例化哪个子类。

  假设要建立一个登记表单,允许你按照不同的格式如:“名 姓” 或者“姓,名”录入姓名,我们希望能通过姓和名之间是否有逗号来确定姓名的顺序。
  姓名的基类:

   public abstract class BaseName {
 protected String firstName;
 protected String lastName;

 public String getFirstName() {
  return this.firstName;
 }

 public String getLastName() {
  return this.lastName;
 }

}

姓在前的具体类:

public class FirstNameAtFirst extends BaseName{
       public FirstNameAtFirst(String name){
        int index=name.lastIndexOf(" ");
        if(index>0){
         firstName=name.substring(0,index);
         lastName=name.substring(index+1);
        
        }else{
         firstName=name;
         lastName="";
        }
       } 
}

名在前的具体类:

public class LastNameAtFirst extends BaseName{
       public LastNameAtFirst(String name){
        int index=name.indexOf(" ");
        if(index>0){
         lastName=name.substring(0,index);
         firstName=name.substring(index+1);
        }else{
         firstName="";
         lastName=name;
        }
       }
}

单一的工厂类(测试):

public class SimpleFactoryTest {
     public static BaseName getNamer(String entry){
      int index=entry.indexOf(",");
         if(index>0){
          return new FirstNameAtFirst(entry);
         }else{
          return new LastNameAtFirst(entry);
         }
     }
     public static void main(String[] args){
      String entry="jiang yuanyuan";
     
      System.out.println(getNamer(entry).getFirstName());
      System.out.println(getNamer(entry).getLastName());
     }
}

 

我们总结下其构造:

public class Creator
{
    //创建工厂方法,一般根据参数来决定产生哪个产品
 public Product factory()
 {
  return new ConcreteProduct();
 }
}
//抽象产品
public interface Product
{
}
//具体的产品,一般有多个
public class ConcreteProduct implements Product
{
 public ConcreteProduct(){}
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

浅谈设计模式

  • 2013-01-03 10:20
  • 4.21MB
  • 下载

Android日记之2012/02/09——浅谈设计模式facade

最近在看些设计模式facade的文章,也做个总结吧,如果说,写的不好,希望大家指正~~~谢谢~~~        其实,感觉设计模式的东西比较难写,理论性比较强,就这么干巴巴的写理论,自己写的没意思...

浅谈MFC中的设计模式

网络上有很多讲解MFC的书和资料,这些书和资料大体可以分为2种类型:1、API参考及使用示例;2、源码分析。第1类着重介绍MFC包含哪些类、有哪些成员函数以及这些成员函数该如何使用,比如《MFC Wi...

结合Unity浅谈设计模式-单例

首先声明代码部分为c#语言为什么说是浅谈设计模式,因为我本人目前还未工作,今年下半年才会开始找工作,所以所有的关于设计模式的认知都是从一些书上和网上了解的。我自己认为,设计模式真的很精髓,不会设计模式...

浅谈设计模式

浅谈单例模式存在目的节约资源确保系统中某个类只有一个实例。(确保对象的唯一性,避免不必要的系统开销)单例模式的三个要点 more 由三个要点可知单例模式的结构特点: 内部实现只生成一个实例 提供静态的...

浅谈开发中常用的设计模式

设计模式在开发中占很重要的地位。在大型项目中使用好设计模式往往会取得事半功倍的效果。本篇博客就介绍下几种在开发中常用到的设计模式。设计原则先看下一些约定俗成的设计原则,其实要遵守以下所有原则很难,但开...

浅谈Java设计模式——单实例、简单工厂、抽象工厂、观察者

最近的项目里面涉及到一些Java设计模式,在此简单谈一下自己的看法,以下实例一部分参考同行,大部分自己设计。1.单例模式 如果一个类始终只能创建一个实例,则这个类成为单例类,这种设计模式...

浅谈设计模式之一——简单工厂、工厂、抽象工厂

这些天意识自身的不足,看着几个同学跳槽后的高薪,实在是惭愧。毕业两年,仍一事无成,差距也正逐渐体现出来。人们常说,设计模式是一个初级程序员到高级程序员的必经之路。为了补强自己,重新研究了GOF四人帮的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)