大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
工厂方法模式分为三种:
成都创新互联专注于伊吾网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供伊吾营销型网站建设,伊吾网站制作、伊吾网页设计、伊吾网站官网定制、微信小程序开发服务,打造伊吾网络公司原创品牌,更为您提供伊吾网站排名全网营销落地服务。
1、普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建
2、多个工厂方法模式,是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。
3、静态工厂方法模式,将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
具体代码请参考:java设计模式 第三大节
如果对您有帮助,请及时采纳谢谢
工厂模式java实例如下:
public interface Work {
void doWork();
}
ConcreteProduct
public class StudentWork implements Work {
public void doWork() {
System.out.println("学生做作业!");
}
}
public class TeacherWork implements Work {
public void doWork() {
System.out.println("老师审批作业!");
}
}
生产者
public interface IWorkFactory {
Work getWork();
}
ConcreteCreator
public class StudentWorkFactory implements IWorkFactory {
public Work getWork() {
return new StudentWork();
}
}
public class TeacherWorkFactory implements IWorkFactory {
public Work getWork() {
return new TeacherWork();
}
}
Test
public class Test {
public static void main(String[] args) {
IWorkFactory studentWorkFactory = new StudentWorkFactory();
studentWorkFactory.getWork().doWork();
IWorkFactory teacherWorkFactory = new TeacherWorkFactory();
teacherWorkFactory.getWork().doWork();
}
}
字符串反转如下:
public String getReverseStr(String str)
{
String reverseStr = "";
if (null != str !str.equals(""))
{
for (int i = 1 ; i =str.length(); i++){
reverseStr += str.charAt(str.length() - i);
// 依次按与原字符串相反的顺序拼装字符串,内部会自动进行类型转换
//str.length() - i刚好是str的下标,因为i是从1开始
}
}
return reverseStr;
}
冒泡排序算法,从小到大
public int[] sortArr(int[] targetArr){
//小到大的排序
int temp = 0;
for(int i = 0;itargetArr.length;i++){
for(int j = i;jtargetArr.length;j++){
if(targetArr[i]targetArr[j]){
temp = targetArr[i];
targetArr[i] = targetArr[j];
targetArr[j] = temp;
}
}
}
return targetArr;
}
Java工厂模式可分为三种:
1.静态工厂模式
2.工厂方法模式
3.抽象工厂模式
一、静态工厂模式:用静态的方法实现,其创建的对象具有一定的特性
举例如下:
Vehicle类:
public abstract class Vehicle
{
private String name;
public Vehicle (){
super();
}
public Vehicle (String name){
super();
this.name=name;
}
public abstract void run();
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
}
Bus类:
public class Bus extends Vehicle
{
private String name;
public Bus(){}
public Bus(String name){
super(name);
}
@Override
public abstract void run(){
System.out.println("Bus is running");
}
}
Car类:
public class Car extends Vehicle
{
private String name;
public Car(){}
public Car(String name){
super(name);
}
@Override
public abstract void run(){
System.out.println("Car is running");
}
}
静态工厂类:
(静态工厂创建一个对象,
静态工厂创建的对象一般都有一个共同的特性,
继承自某一个类,
或者引用一个接口)
public class StaticFactory{
public static Object getInstance(String className){
Object instance=null;
try{
Class c=Class.forName(className);
instance=c.newInstance();
}catch(Exception e){}
return instance;
}
public static Object getInstance(String className,Object ...args){
Class c=null;
try{
c=Class.forName(className);
}catch(Exception e){}
Constructor[] cons=c.getConstructors();
Object instance=null;
for(Constructor con:cons){
Class?[] cs=con.getParmeterTypes();
if(cs.length0){
boolean isConstructor=true;
for(int i=0;ics.length;i++){
Class t=cs[i];
if(!t.isInstance(args[i])){
isConstructor=false;
}
}
if(isConstructor){
try{
instance=con.newInstance(args);
break;
}catch(Exception e){}
}else{
continue;
}
}
}
return instance;
}
}
二、工厂方法模式:主要是对各类东西分类生产,但分类生产的对象仍然具有某一特性。
如果说静态工厂是一个综合的交通工具建造工厂,
那么工厂方法模式就是具体分工,分成Bus与Car的工厂,
各自生产各自的产品,但是造出来的还是交通工具。
交通工具制造接口:
public interface VehicleMake{
/**制造交通工具**/
public Vehicle make();
}
Bus制造类:
public class BusMake implements VehicleMake{
@Override
public Vehicle make(){
Vehicle bus=new Bus();
System.out.println("Bus工厂制造了一辆Bus");
return bus;
}
}
Car制造类:
public class CarMake implements VehicleMake{
@Override
public Vehicle make(){
Vehicle car=new Car();
System.out.println("Car工厂制造了一辆Car");
return car;
}
}
三、抽象工厂模式:抽象工厂生产的对象可能是没有共同特性的。比如,一个制造工厂BusMake不仅能制造Bus还能生产轮胎wheel等配件,Bus是交通工具,wheel是配件(代码中有部分类没具体写出来只给了类名)
总工厂(抽象工厂总接口):
public interface WheelVehicleMake extends VehicleMake{
/**制造轮胎**/
public Wheel makeWheel();
}
轮子BusMake:
public class WheelBusMake implements WheelVehicleMake{
@Override
public Vehicle make(){
Vehicle bus=new Bus();
System.out.println("WheelBusMake生产了一辆Bus");
return bus;
}
@Override
public Wheel makeWheel(){
Wheel busWheel=new BusWheel();
System.out.println("WheelBusMake生产了一个Bus轮子");
return busWheel;
}
}
轮子CarMake:
public class WheelCarMake implements WheelVehicleMake{
@Override
public Vehicle make(){
Vehicle car=new Car();
System.out.println("WheelCarMake生产了一辆Car");
return car;
}
@Override
public Wheel makeWheel(){
Wheel carWheel=new CarWheel();
System.out.println("WheelCarMake生产了一个Car轮子");
return carWheel;
}
}
工厂模式 就是用对象不要自己new 了,要先创建其对象的工厂,DateFormat就是,getDateInstance是得到该对象的一个实例(就是得到你想要的对象),然后就可以继续使用对象的方法做事了
这个应该比较简单一点。
某系统日志记录器要求支持多种日志记录方式,如文件记录、数据库记录等,且用户可以根据要求动态选择日志记录方式。现使用工厂方法模式设计该系统,并写出相应Java代码。
interface Log{
public void writeLog();
}
class FileLog implements Log{
public void writeLog(){
System.out.println("文件记录");
}
}
class DatabaseLog implements Log{
public void writeLog(){
System.out.println("数据库记录");
}
}
interface LogFactory{
public Log createLog();
}
class FileLogFactory implements LogFactory{
public Log createLog(){
return new FileLog();
}
}
class DatabaseLogFactory implements LogFactory{
public Log createLog(){
return new DatabaseLog();
}
}
public class Client{
public static void main(String[] args) {
try{
Log log;
LogFactory factory;
//这里可以改成使用DOM和Java反射机制读取XML文件,获取工厂类名
factory=new DatabaseLogFactory ();
log=factory.createLog();
log.writeLog();
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}