Java设计模式——工厂模式
来源:互联网 发布:mac版pscc2017破解教程 编辑:程序博客网 时间:2024/05/17 16:44
工厂模式-单例及多例:http://www.cnblogs.com/shamgod/p/4586146.html
一、单例的作用是用于控制类的生成方式,而不让外部类任意new对象
1.Car.java
import
java.util.ArrayList;
import
java.util.List;
public
class
Car {
//私有化构造函数,防止被外部的类new
private
Car() {
}
private
static
Car car =
new
Car();
//单例
private
static
List<Car> cars =
new
ArrayList<Car>();
//多例,类似连接池
public
static
Car getInstance() {
return
car;
}
public
void
run() {
System.out.println(
"Car running..............."
);
}
}
2.Test.java
public
class
Test {
@org
.junit.Test
public
void
test() {
Car car = Car.getInstance();
car.run();
Car car2 = Car.getInstance();
System.out.println(car == car2);
System.out.println(car.equals(car2));
}
}
运行结果:
简单工厂--转自:http://www.cnblogs.com/shamgod/p/4586349.html
一、概述
1.目标:要控制任意类型交通工具的生产模式
2.目标有两层意思(1)任意类型 (2)生产模式,所以对应的,要这两个层面上抽象(Movable,VehicleFactory),利用接口,实现多态
二、类结构
1.Interface Movable.java
2.Car.java
3.Plane.java
4.Interface VehicleFactory.java
5.CarFactory.java
6.PlaneFactory.java
三、代码
1.Movable.java
public
interface
Movable {
void
run();
}
2.Car.java
public
class
Car
implements
Movable {
public
Car() {
}
public
void
run() {
System.out.println(
"Car running..............."
);
}
}
3.Plane.java
public
class
Plane
implements
Movable {
@Override
public
void
run() {
System.out.println(
"飞机飞翔中。。。。"
);
}
}
4.VehicleFactory.java
public
interface
VehicleFactory {
Movable create();
}
5.CarFactory.java
public
class
CarFactory
implements
VehicleFactory {
private
static
Car car =
new
Car();
@Override
public
Movable create() {
return
car;
}
}
6.PlaneFactory.java
public
class
PlaneFactory
implements
VehicleFactory {
private
static
Plane plane =
new
Plane();
@Override
public
Movable create() {
return
plane;
}
}
7.Test.java
public
class
Test {
@org
.junit.Test
public
void
test() {
VehicleFactory factory =
new
CarFactory();
Movable m1 = factory.create();
m1.run();
Movable m2 = factory.create();
System.out.println(m1 == m2);
System.out.println(m1.equals(m2));
System.out.println(
"******************************"
);
factory =
new
PlaneFactory();
m1 = factory.create();
m1.run();
m2 = factory.create();
System.out.println(m1 == m2);
System.out.println(m1.equals(m2));
}
}
8.测试结果
抽象工厂——http://www.cnblogs.com/shamgod/p/4586720.html
一、概述
1.抽象工厂:当情况是需要产生一系列产品,若需更换产品,则要求一系列产品一起换,且要控制一系列产品的产生过程,此时可考虑抽象工厂模式。例:小明装修屋子,把电视、冰箱都替换掉,他这次需要把电视、冰箱换成三星的,下次装修可能要换成海尔的。此时可设计抽象类Telveison及Fridge负责产生产品,抽象工厂AbstractFactory负责产生一系列产品
PS:抽象工厂与普通工厂各自的优缺点:
(1)普通工厂容易在产品维度进行扩展,但产生系列产品时不方便,且易造成工厂类泛滥
(2)抽象工厂增加新产品时,要修改AbstractFactory等多处地方
二、类结构
1.Televison.java
2.Fridge.java
3.SamsumgTelevison.java
4.SamsungFridge.java
5.HaierTevevison.java
6.HaierFridge.java
7.AbstractFactory.java
8.SamsungFactory.java
9.HaierFactory.java
三、代码
1.Televison.java
public
abstract
class
Televison {
abstract
void
show();
}
2.Fridge.java
public
abstract
class
Fridge {
abstract
void
cool();
}
3.SamsumgTelevison.java
public
class
SamsungTelevison
extends
Televison {
@Override
public
void
show(){
System.out.println(
"SamsungTelevison showing..........."
);
}
}
4.SamsungFridge.java
public
class
SamsungFridge
extends
Fridge {
@Override
void
cool() {
System.out.println(
"SamsungFridge cooling"
);
}
}
5.HaierTevevison.java
public
class
HaierTelevison
extends
Televison {
@Override
void
show() {
System.out.println(
"海尔电视 showinng..........."
);
}
}
6.HaierFridge.java
public
class
HaierFridge
extends
Fridge {
@Override
void
cool() {
System.out.println(
"海尔冰箱冷却中............"
);
}
}
7.AbstractFactory.java
public
abstract
class
AbstractFactory {
abstract
Televison createTelevison();
abstract
Fridge createFridge();
}
8.SamsungFactory.java
public
class
SamsungFactory
extends
AbstractFactory {
@Override
Televison createTelevison() {
return
new
SamsungTelevison();
}
@Override
Fridge createFridge() {
return
new
SamsungFridge();
}
}
9.HaierFactory.java
public
class
HaierFactory
extends
AbstractFactory {
@Override
Televison createTelevison() {
return
new
HaierTelevison();
}
@Override
Fridge createFridge() {
return
new
HaierFridge();
}
}
10.Test.java
public
class
Test {
@org
.junit.Test
public
void
test(){
AbstractFactory factory =
new
SamsungFactory();
Televison tv = factory.createTelevison();
Fridge fridge = factory.createFridge();
tv.show();
fridge.cool();
System.out.println(
"======================================="
);
factory =
new
HaierFactory();
tv = factory.createTelevison();
fridge = factory.createFridge();
tv.show();
fridge.cool();
}
}
运行结果:
- Java设计模式—工厂设计模式
- Java设计模式—工厂方法模式&抽象工厂模式
- Java设计模式—工厂方法模式&抽象工厂模式
- JAVA设计模式——工厂模式
- java设计模式——工厂模式
- java设计模式——工厂模式
- Java设计模式——工厂模式
- Java设计模式——工厂模式
- java设计模式——工厂模式
- Java设计模式——工厂模式
- java设计模式——工厂模式
- java设计模式——工厂模式
- java设计模式——工厂模式
- java设计模式——工厂模式
- Java设计模式——工厂模式
- Java设计模式——工厂模式
- Java设计模式——工厂模式
- Java设计模式——工厂模式
- [Android][SystemUI]navigationbar 3个虚拟键隐藏与显示
- Java基础:JDK、JRE、JVM的区别与联系
- [Boolan] C++第七周 STL 泛型编程(一)
- 算法第二周解题报告
- 虚函数与继承
- Java设计模式——工厂模式
- PAT 1125. Chain the Ropes (25)
- linux用netstat查看服务及监听端口
- POJ2337 欧拉路径
- hibernate 异常小结一
- 百亿互金平台救火故事
- cmd 同时运行多个命令
- PAT乙级1066
- 复杂的1秒图解Google搜索技术 中文WORD版