第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

設(shè)計模式-創(chuàng)建型模式-工廠模式(工廠三兄弟)

设计模式-创建型模式-工厂模式(工厂三兄弟)
工厂模式分为简单工厂,工厂方法,抽象工厂。

简单工厂模式

一个接口,三个具体类,一个工厂,通过选择,生产出对应的对象。

package demo2;

public class Circle implements Shape{
	public Circle() {
		
	}

	@Override
	public void draw() {		
	}
	
}

package demo2;

public class Rectangle implements Shape{
	public Rectangle() {
		
	}
	
	@Override
	public void draw() {		
	}

}

package demo2;

public interface Shape {
	void draw();
}

package demo2;

public class ShapeFactory {
	public static Shape getShape(String shapeType) {
		if(shapeType == null) {
			return null;
		}
		
		if (shapeType == "Circle") {
			return new Circle();
		}
		
		if (shapeType == "Rectangle") {
			return new Rectangle();
		}
		
		if (shapeType == "Square") {
			return new Square();
		}
		return null;
	}
}

package demo2;

public class Square implements Shape{
	public Square() {
		
	}

	@Override
	public void draw() {		
	}
}

package demo2;

public class Test {
	public static void main(String[] agrs) {
		Shape circle = new ShapeFactory().getShape("Circle");
		circle.draw();
	}
}

利用反射改进工厂模式

由于违反开放-封闭原则,每次都要去修改源代码,所以直接使用反射机制。
将类传入,使用泛型+反射,生产出对象。

package demo2;

public class ShapeFactory2 {
	@SuppressWarnings("deprecation")
	public static Object getClass(Class<? extends Shape> clazz) {	// 代表通配的是Shape的子类,即都为借口的子类
		Object obj = null;
		
			try {
				obj = Class.forName(clazz.getName()).newInstance();
			} catch (InstantiationException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
		return obj;
		
	}
}

package demo2;

public class Test {
	public static void main(String[] agrs) {
		Shape circle = (Circle)ShapeFactory2.getClass(Circle.class);
		circle.draw();
	}
}

工厂方法

每个对象有对应的工厂,将原先的工厂拆分。

package demo2;

public class CircleFactory implements Factory{

	@Override
	public Shape getShape() {
		return new Circle();
	}

}

package demo2;

public class RectangleFactory implements Factory{

	@Override
	public Shape getShape() {
		return new Rectangle();
	}

}

package demo2;

public class SquareFactory implements Factory{

	@Override
	public Shape getShape() {
		return new Square();
	}

}

package demo2;

public class Test {
	public static void main(String[] agrs) {
		Factory circleFactory = new CircleFactory();
		Shape circle = circleFactory.getShape();
		circle.draw();
	}
}

抽象工厂

两个抽象接口,一个为产品,一个为工厂,进行生产

产品

public interface Gun{
	public void shooting();
}

子弹

public interface Bullet{
	public void load();
}

ak类

public class AK implements Gun{
	@Override
	public void shooting(){};
}

对应子弹

public class AK_Bullet implements Bullet{
	@Override
	public void load(){};
}

m4

public class M4 implements Gun{
	@Override
	public void shooting(){};
}

对应子弹

public class M4_Bullet implements Bullet{
	@Override
	public void load(){};
}

工厂

public interface Factory{
	public Gun produceGun();
	public Bullet produceBullet();
}

具体工厂
ak

public class AK_Factory implements Factory {
	@Override
	public Gun produceGun(){
		return new AK();
	}
	@Override
	public Bullet produceBullet(){
		return new AK_Bullete();
	}
}

M4

public class M4_Factory implements Factory{
	@Override
	public Gun produceGun(){
		return new M4();
	}
	@Override
	public Bullet produceBullet(){
		return new M4_Bullet();
	}
}
點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消