浅谈设计模式

原创 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(){}
}



浅谈MVC设计模式与MFC文档结构

  • 2014年01月01日 20:15
  • 239KB
  • 下载

浅谈java中dao工厂设计模式

      来源:http://www.114java.com/javajichu/201007/2389.html     在JAVA开发中,随 着软件分层设计的流行及广泛的应用,对于DAO设 ...

浅谈MVP与Model-View-ViewModel(MVVM)设计模式

http://xiaoyinnet.blog.51cto.com/909896/196071 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法...

Android设计模式之浅谈MVP

一.概述 转自http://blog.csdn.net/l2show/article/details/46659027 MVP(Model-View-Presenter) 是总所周知MVC...

浅谈javaweb三大框架和MVC设计模式

浅谈javaweb三大框架和MVC设计模式
  • Air_hjj
  • Air_hjj
  • 2017年06月04日 15:27
  • 580

浅谈:单例设计模式(Singleton)

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。简单点说,设计模式就是对问题行之有效的解决方式,是一种思想。单例设计模式就是保证一个类在内存...

浅谈JAVA设计模式之——模板方法(TemplateMethod)

一、概述 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 二、适用性 1.一次性实现一个算法的不变...

Java DAO设计模式浅谈(就是MODEL1)

这篇文章建立在有比较好的java基础之上。没有学过web开发的也能学习,主要是如何操作数据库比较合理。        资源层主要是对一些数据进行储存,比如数据库。 数据层就是对资源层...

深入体验JavaWeb开发内幕——浅谈面向对象的设计模式

java是一种面向对象的编程语言,所谓面向对象,就是一个封装类的具体实现。那么面向对象的思想在JavaWeb开发中是如何体现的呢?尤其是面向对象的思想在JSP等技术中是怎样应用的呢?       ...

浅谈Builder设计模式

1.Builder设计模式的特点 1)所有的set方法必须返回当前对象 2)连续调用 2.为什么这么设计? 1)节约资源 2)方便多次设置数据 3)方便组合不同的对象 4)不需要创建引用...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈设计模式
举报原因:
原因补充:

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