一、工厂模式要点
-简单工厂模式(静态工厂模式)
虽然某种程度不符合设计原则,但实际使用最多。
-工厂方法模式
不修改已有类的前提下,通过增加新的工厂类实现扩展。
-抽象工厂模式
不可以增加产品,可以增加产品族!
二、应用场景
三、简单工厂模式代码
package Factory.SimpleFactory;
public interface Cars {
void run();
}
package Factory.SimpleFactory;
public class Audi implements Cars{
@Override
public void run() {
System.out.println("奥迪在跑");
}
}
package Factory.SimpleFactory;
public class Byd implements Cars{
@Override
public void run() {
System.out.println("比亚迪在跑");
}
}
package Factory.SimpleFactory;
/***
* 简单工厂模式
*
* @author zw
*
*/
public class CarFactory {
public static Cars createCar(String type) {
if("奥迪".equals(type)) {
return new Audi();
}else if("比亚迪".equals(type)) {
return new Byd();
}else {
return null;
}
}
}
package Factory.SimpleFactory;
/***
* 简单工厂模式
*
* @author zw
*
*/
public class CarFactory2 {
public static Cars createAudi() {
return new Audi();
}
public static Cars createByd() {
return new Byd();
}
}
package Factory.SimpleFactory;
public class App {
public static void main(String[] args) {
Cars c1 = CarFactory.createCar("奥迪");
Cars c2 = CarFactory.createCar("比亚迪");
c1.run();
c2.run();
Cars c3 = CarFactory2.createAudi();
Cars c4 = CarFactory2.createByd();
c3.run();
c4.run();
}
}
三、工厂方法模式代码
利用上面的byd和audi类,继续做延伸
package Factory.factorymethod;
public class BydFactory implements CarFactory {
@Override
public Cars createCar() {
// TODO Auto-generated method stub
return new Byd();
}
}
package Factory.factorymethod;
public interface CarFactory {
Cars createCar();
}
package Factory.factorymethod;
/***
* 工厂方法模式
* 给每个对象增加方法
*
*
* 实际上我们使用简单工厂模式就行。。工厂方法
* 模式对客户端编程比较复杂
* @author zw
*
*/
public class Client {
public static void main(String[] args) {
Cars car =new BydFactory().createCar();
car.run();
}
}
四、抽象工厂模式代码
package Factory.abstractfactory;
public interface LunTai {
void quality();
}
class niubiLuntai implements LunTai{
@Override
public void quality() {
System.out.println("好轮胎 用十年");
}
}
class lajiLuntai implements LunTai{
@Override
public void quality() {
System.out.println("坏轮胎 一年都用不到");
}
}
package Factory.abstractfactory;
public interface Engine {
void run();
void start();
}
class niubiEngine implements Engine{
@Override
public void run() {
System.out.println("好车就是牛,跑的块");
}
@Override
public void start() {
System.out.println("智能引擎启动,超越自我~");
}
}
class lajiEngine implements Engine{
@Override
public void run() {
System.out.println("转的慢");
}
@Override
public void start() {
System.out.println("启动的也慢");
}
}
package Factory.abstractfactory;
public interface Seat {
void massage();
}
class niubiSeat implements Seat{
@Override
public void massage() {
System.out.println("按摩按得相当舒服");
}
}
class lajiSeat implements Seat{
@Override
public void massage() {
System.out.println("硬皮座椅,难受");
}
}
package Factory.abstractfactory;
public interface CarFactory {
Engine createEngine();
LunTai createLuntai();
Seat createSeat();
}
class lajiCarFactory implements CarFactory{
@Override
public Engine createEngine() {
// TODO Auto-generated method stub
return new lajiEngine();
}
@Override
public LunTai createLuntai() {
// TODO Auto-generated method stub
return new lajiLuntai();
}
@Override
public Seat createSeat() {
// TODO Auto-generated method stub
return new lajiSeat();
}
}
class niubiCarFactory implements CarFactory{
@Override
public Engine createEngine() {
// TODO Auto-generated method stub
return new niubiEngine();
}
@Override
public LunTai createLuntai() {
// TODO Auto-generated method stub
return new niubiLuntai();
}
@Override
public Seat createSeat() {
// TODO Auto-generated method stub
return new niubiSeat();
}
}
package Factory.abstractfactory;
public class Client {
public static void main(String[] args) {
CarFactory factory = new niubiCarFactory();
Engine e =factory.createEngine();
e.start();
e.run();
}
}