cari
RumahJavajavaTutorialJava实现策略(Strategy)模式具体介绍

策略模式:行为型模式

将同一行为,不同的处理算法分别封装起来。让它们之间可以互相替换

1. 定义一个超类型接口,及 行为方法

2. 定义不同的实现类,实现该行为的 不同的算法


/**
 * 策略模式:针对同一命令(或行为),不同的策略做不同的动作
 *  商品促销
 *  本类为:收取现金的类
 *  
 *  @author stone
 */
public interface ICashSuper {
	 double acceptCash(double money);
}
/**
 * 正常收取现金
 * @author stone
 *
 */
public class CashNormal implements ICashSuper {

	@Override
	public double acceptCash(double money) {
		return money;
	}

}
/**
 * 打折收取现金 
 * @author stone
 *
 */
public class CashRebate implements ICashSuper {
	private double rebate; //折扣
	public CashRebate (double rebate) {
		this.rebate = rebate;
	}

	@Override
	public double acceptCash(double money) {
		return new BigDecimal(money * rebate / 10).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	
}
/**
 * 让利返现  收取现金
 * @author stone
 *
 */
public class CashReturn implements ICashSuper {
	private double moneyCondition; //返现底限金额
	private double returnMoney; //返还金额
	public CashReturn(double moneyCondition, double returnMoney) {
		this.moneyCondition = moneyCondition;
		this.returnMoney = returnMoney;
	}

	@Override
	public double acceptCash(double money) {//多重返利
		if (money >= moneyCondition) {
			return money - Math.floor(money / moneyCondition) * returnMoney;
		} else {
			return money;
		}
	}
	
	
}
/**
 * 根据传递的的策略类,执行相应的行为
 * @author stone
 *
 */
public class CashContext {
	private ICashSuper casher;
	
	public CashContext() {
		
	}
	
	public CashContext(ICashSuper casher) {
		this.casher = casher;
	}
	
	public void setCasher(ICashSuper casher) {
		this.casher = casher;
	}
	
	//根据具体的策略对象,调用它的算法行为
	public double acceptCash(double money) {
		return this.casher.acceptCash(money);
	}
	
}
/*
 * 策略(Strategy)模式 关注:行为的选择
 * 封装了一系列策略对象,用户来选择使用哪种策略对象
 * 与简单工厂的区别:
 * 		策略模式,传入策略对象给Context,由Context封装策略对象的方法调用,对外公开Context的方法接口
 * 		简单工厂模式,传入一个简单参数,创建对象,然后调用出厂对象的方法
 * 与装饰模式的区别:
 * 		很明显,Context无需实现(implements)业务接口,不需要增强已有的策略对象的功能
 * 策略模式多用在算法决策系统中, 比如工资结算
 */
public class Test {
	public static void main(String[] args) {
		double money = 998; //原价
		CashContext cashContext = new CashContext(new CashNormal());
		System.out.println("原价:" + cashContext.acceptCash(money)); //通常  策略
		
		cashContext.setCasher(new CashRebate(8.5));
		System.out.println("打85折:" + cashContext.acceptCash(money)); //折扣   策略   85折
		
		cashContext.setCasher(new CashReturn(300, 50));
		System.out.println("满300 返50:" + cashContext.acceptCash(money)); //返现  策略    满300 返50
		
	}
}

打印

原价:998.0
打85折:848.3
满300 返50:848.0

Atas ialah kandungan terperinci Java实现策略(Strategy)模式具体介绍. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?Mar 17, 2025 pm 05:46 PM

Artikel ini membincangkan menggunakan Maven dan Gradle untuk Pengurusan Projek Java, membina automasi, dan resolusi pergantungan, membandingkan pendekatan dan strategi pengoptimuman mereka.

Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul?Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul?Mar 17, 2025 pm 05:45 PM

Artikel ini membincangkan membuat dan menggunakan perpustakaan Java tersuai (fail balang) dengan pengurusan versi dan pergantungan yang betul, menggunakan alat seperti Maven dan Gradle.

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?Mar 17, 2025 pm 05:44 PM

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas?Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas?Mar 17, 2025 pm 05:43 PM

Artikel ini membincangkan menggunakan JPA untuk pemetaan objek-relasi dengan ciri-ciri canggih seperti caching dan pemuatan malas. Ia meliputi persediaan, pemetaan entiti, dan amalan terbaik untuk mengoptimumkan prestasi sambil menonjolkan potensi perangkap. [159 aksara]

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?Mar 17, 2025 pm 05:35 PM

Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual