java设计模式---浅谈2种工厂模式和单例模式
来源:互联网 发布:印度主流聊天软件 编辑:程序博客网 时间:2024/04/29 08:21
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证明实例唯一
}
}
- java设计模式---浅谈2种工厂模式和单例模式
- 浅谈常见设计模式--单例模式 简单工厂模式
- Java-设计模式-单例模式浅谈
- java设计模式 单例设计模式+静态工厂模式
- java 单例模式和工厂模式
- JAVA三种设计模式--------单例、工厂、代理模式
- java 设计模式之单例模式,工厂模式
- java设计模式之单例模式、工厂模式
- 设计模式-单例模式,工厂模式
- JAVA基础9(设计模式 单例模式 工厂模式 建造者模式 原型模式)
- java设计模式之单例,工厂,代理模式
- 浅谈工厂设计模式
- 单例、工厂设计模式
- 设计模式 单例模式 简单工厂
- 单例设计模式,简单工厂模式
- 设计模式(工厂模式、单例模式、模板模式)
- 设计模式【工厂模式】【单例模式】【装饰者模式】
- 设计模式(单例模式,工厂模式,适配器模式)
- ORACLE10g修改RAC VIP
- 返璞归真的Linux BFS调度器
- 基于像素的皮肤检测技术
- java split 小数点无法做参数的问题
- 阶段备忘录之灵山备忘
- java设计模式---浅谈2种工厂模式和单例模式
- Python:pygame模块及SDL库简介
- C++中引用和指针的一些区别
- Windows与VMware的ubuntu共享文件夹
- 互联网电视应用与移动终端应用的区别
- 关于GDI
- C语言动态数组
- when u change the network settings of ubuntu
- oracle入门篇