java设计模式---浅谈2种工厂模式和单例模式

1、 工厂模式  。比如有一个统一接口  A   ,这个A接口是一个标准  。如果有类  B  和 C   那么 BC必须实现A接口  。

我们在以往的 方法生成这种对象的时候   A  b=new  B() ;  A c=new C() ;这样的方式来的 .但是如果不同的类需要不同的初始化的时候我们如果全部放在构造方法完成那么

就严重破坏了 面向对象的概念 。   我们想要的就是一个工厂 Factory ,也就是一个代理  我们通过它的唯一接口来 产生不同类型的产品 。下面是一段代码 :

1、一般的工厂

interface Product   //这里接口只是为了保证 返回的对象可以 统一用 Product接受 
{
 void show() ;
}
class  ProductA  implements Product
{

 @Override
 public void show() {
  System.out.println("Product A!");
  
 }
 

class  ProductB   implements Product     
{

 @Override
 public void show() {
  System.out.println("Product B");
  
 }
 
}
public class Factory     //作为工厂来使用

 public static Product getProduct(int product_index)
 {
  if(product_index==0)
   return new ProductA();
  if(1==product_index)
   return new ProductB() ;
  return null; 
 }
}

 2、反射类型的工厂   ,看下面工厂方式 你有什么感想呢?java web开发中经常用到

package me.test;
interface Product   //这里接口只是为了保证 返回的对象可以 统一用 Product接受 
{
 void show() ;
}
class  ProductA  implements Product
{

 @Override
 public void show() {
  System.out.println("Product A!");
  
 }
 

class  ProductB   implements Product     
{

 @Override
 public void show() {
  System.out.println("Product B!");
  
 }
 
}
public class Factory     //作为工厂来使用

 public static Product getProduct(String className) throws InstantiationException, IllegalAccessException, ClassNotFoundException
 {
  return (Product)Class.forName(className).newInstance() ;
  
 }
 public static void main(String []args) throws InstantiationException, IllegalAccessException, ClassNotFoundException
 {
   
  Product a=Factory.getProduct("me.test.ProductA") ;
  a.show() ;
  Product b=Factory.getProduct("me.test.ProductB") ;
  b.show() ;
  }
}

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                                        单例模式 Singleton    就是保证一个类只有一个实例 。。2中方法

1、
class  One
{
 private One(){}
    private static One instance =null ;
 public synchronized static One getInstance()
 { 
  if(instance==null)
   instance=new One() ;
  return instance;
 }
}
public class Singleton {
 public static void main(String[] args)
 {
  Object obj1,obj2 ;
  obj1=One.getInstance() ;
  obj2=One.getInstance() ;
  System.out.println("(obj1==obk2)="+(obj1==obj2));  //结果为True证明实例唯一
 }

}

2、方法2    相比第一种方法 这种方法不需要一次次判断内置对象是否为空
class  One
{
 private One(){}
    private static One instance =new One() ;
 public  static One getInstance()
 { 
  return instance ;
 }
}
public class Singleton {
 public static void main(String[] args)
 {
  Object obj1,obj2 ;
  obj1=One.getInstance() ;
  obj2=One.getInstance() ;
  System.out.println("(obj1==obk2)="+(obj1==obj2));  //结果为True证明实例唯一
 }

}

 

 

 

 

 

 

 

 

 

 

 

时间: 2024-10-28 06:59:30

java设计模式---浅谈2种工厂模式和单例模式的相关文章

Java设计模式(三—四)----工厂模式

Java设计模式 工厂模式 一.引言 二.分类 三.简单工厂模式 四.工厂方法模式 五.抽象工厂模式 六.和工厂方法模式区别 七.总结 工厂模式 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象.在这些情况,新对象的建

深入理解java三种工厂模式_java

适用场合: 7.3 工厂模式的适用场合 创建新对象最简单的办法是使用new关键字和具体类.只有在某些场合下,创建和维护对象工厂所带来的额外复杂性才是物有所值.本节概括了这些场合. 7.3.1 动态实现 如果需要像前面自行车的例子一样,创建一些用不同方式实现同一接口的对象,那么可以使用一个工厂方法或简单工厂对象来简化选择实现的过程.这种选择可以是明确进行的也可以是隐含的.前者如自行车那个例子,顾客可以选择需要的自行车型号:而下一节所讲的XHR工厂那个例子则属于后者,该例中所返回的连接对象的类型取决

浅谈几种常用的JS类定义方法_javascript技巧

// 方法1 对象直接量 var obj1 = { v1 : "", get_v1 : function() { return this.v1; }, set_v1 : function(v) { this.v1 = v; } }; // 方法2 定义函数对象 var Obj = function() { var v1 = ""; this.get_v1 = function() { return this.v1; }; this.set_v1 = function

Java 学习方法浅谈

Java 学习方法浅谈 -------------------------------------------------------------------------------- Java本身是一种设计的非常简单,非常精巧的语言,所以Java背后的原理也很简单,归结起来就是两点: 1.JVM的内存管理 理解了这一点,所有和对象相关的问题统统都能解决 2.JVM Class Loader 理解了这一点,所有和Java相关的配置问题,包括各种App Server的配置,应用的发布问题统统都能解

PHP设计模式之工厂模式与单例模式_php技巧

本文实例讲述了PHP设计模式之工厂模式与单例模式实现方法.分享给大家供大家参考,具体如下: 设计模式简单说应对某类问题而设计的解决方式 工厂模式:应对需求创建相应的对象 class factory{ function __construct($name){ if(file_exists('./'.$name.'.class.php')){ return new $name; }else{ die('not exist'); } } } 单例模式:只创建一个对象的实例,不允许再创建实例,节约资源(

在线导航吧浅谈八种网站推广方式

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 做网站推广的动力来源于网站的流量,流量的高低取决于站长的推广方式,而在站长们的使用的众多的推广方法中,几乎都发现推广不同所带来的效果也不同,那么如何使网站推广发挥最大的效益,获取网站稳定的流量呢?接下来由在线导航吧浅谈八种网站推广 一.软文推广 软文推广也是最直接,最有效的推广方式,好的一篇软文想当于2000篇垃圾新闻,同时好的软文经常会被互

PHP最常用的2种设计模式工厂模式和单例模式介绍_php技巧

1.工厂模式 主要作用是降低耦合度. 复制代码 代码如下: abstract class Operation{ abstract public function getValue($num1,$num2); public function getAttr(){ return 1; } } class Add extends Operation{ public function getValue($num1, $num2){ return $num1+$num2; } } class Sub ex

设计模式C#描述之——简单工厂模式

设计 前言:设计模式是软件开发领域的精髓之一.学好设计模式是目前每一个开发人员的必修课.目前关于设计模式的书很多,其中比较好的有GOF那本的中译本,但并不很适合初学者.还有一本是<JAVA与模式>,比较适合初学者使用,在此强烈推荐.但这本书的不足之处是一些地方讲的过于繁琐,很多地方只须简单说明一下即可,却大费笔墨,使得书籍很厚,看起来费力.而且是用JAVA描述的,这使得一些只懂C#的人无从下手.我是一个.net的拥护者,为了看这本书我特意看了些JAVA的书,感觉JAVA在书籍的多样性方面比 .

设计模式系列之三:抽象工厂模式

前言 在设计模式有三个模式是与工厂模式相关的,分别是:简单工厂模式.工厂方法模式以及抽象工厂模式.在前面的文章中已经谈到前面两种,这里就对抽象工厂模式介绍一下.抽象工厂模式就是提供一个创建一系列相关或者相互依赖的接口(也就是抽象类),而无需指定具体的类.简单来说,就是当我们需要创建一个具体的对象的时候,我们不必指定该具体的对象,只需要使用它的上层接口直接调用就行.好像还是很抽象哦,好吧,为了更清晰领悟这个设计模式,我们还是通过一个案例来说明 问题背景 某公司开发了一个A软件,数据库使用的是SQL